
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
import sys
import random
import json

class EnhancedVideoGenerator:
    def __init__(self, output_size=1000):
        self.output_size = output_size
        self.setup_random_seeds()
        self.setup_data_templates()
        
    def setup_random_seeds(self):
        """设置随机种子确保结果可复现"""
        np.random.seed(42)
        random.seed(42)
        
    def setup_data_templates(self):
        """设置数据模板"""
        # 真实的短视频作者名称
        self.authors = [
            "搞笑小达人", "沙雕网友", "段子手联盟", "神回复bot", "翻车现场", "恶搞大师",
            "影视吐槽君", "综艺挖掘机", "游戏解说员", "剧情解说家", "反转女王", "爽剧推荐官",
            "萌宠搞笑君", "美食翻车王", "评论大赏", "挑战达人", "配音鬼才", "吐槽小能手",
            "游戏萌新开", "反转制造机", "治愈系小仙女", "高燃剪辑师", "沙雕日常君",
            "神评论收集者", "翻车现场记录员", "恶搞实验家", "剧情分析大师", "游戏攻略君",
            "萌宠日常", "美食探店", "旅行vlog", "美妆教程", "健身打卡", "音乐分享",
            "知识科普", "生活小技巧", "职场干货", "情感故事", "历史趣闻", "科技前沿"
        ]
        
        # 真实的短视频标题模板
        self.title_templates = {
            "搞笑类": [
                "笑死我了！{content}",
                "这个{content}太沙雕了",
                "哈哈哈哈{content}",
                "笑到肚子疼的{content}",
                "网友神回复：{content}",
                "翻车现场：{content}",
                "沙雕网友的{content}",
                "这个{content}绝了！",
                "笑不活了！{content}",
                "网友的{content}太有才了"
            ],
            "美食类": [
                "今天做{content}，结果...",
                "挑战{content}，翻车了",
                "这个{content}太香了！",
                "网友推荐的{content}",
                "第一次做{content}",
                "这个{content}做法绝了",
                "挑战{content}，成功了！",
                "这个{content}太简单了",
                "网友的{content}教程",
                "这个{content}太治愈了"
            ],
            "萌宠类": [
                "我家{content}太可爱了",
                "这个{content}成精了",
                "网友家的{content}",
                "这个{content}太萌了",
                "我家{content}的日常",
                "这个{content}太聪明了",
                "网友的{content}太乖了",
                "这个{content}太搞笑了",
                "我家{content}又闯祸了",
                "这个{content}太治愈了"
            ],
            "游戏类": [
                "这个{content}太强了！",
                "网友的{content}操作",
                "这个{content}太秀了",
                "挑战{content}，失败了",
                "这个{content}太好玩了",
                "网友的{content}攻略",
                "这个{content}太刺激了",
                "挑战{content}，成功了！",
                "这个{content}太解压了",
                "网友的{content}技巧"
            ],
            "影视类": [
                "这个{content}太精彩了",
                "网友推荐的{content}",
                "这个{content}太感人了",
                "网友的{content}分析",
                "这个{content}太震撼了",
                "网友的{content}解说",
                "这个{content}太烧脑了",
                "网友的{content}吐槽",
                "这个{content}太治愈了",
                "网友的{content}推荐"
            ]
        }
        
        # 内容关键词
        self.content_keywords = {
            "搞笑类": ["段子", "神回复", "翻车", "沙雕", "恶搞", "吐槽", "神评论", "网友", "日常", "操作"],
            "美食类": ["蛋糕", "面条", "饺子", "包子", "汤圆", "月饼", "火锅", "烧烤", "甜品", "家常菜"],
            "萌宠类": ["猫咪", "狗狗", "仓鼠", "兔子", "小鸟", "金鱼", "乌龟", "仓鼠", "龙猫", "刺猬"],
            "游戏类": ["操作", "技巧", "攻略", "翻车", "成功", "失败", "挑战", "解谜", "战斗", "建造"],
            "影视类": ["剧情", "角色", "演员", "特效", "音乐", "画面", "结局", "反转", "彩蛋", "细节"]
        }
        
        # 视频分类
        self.categories = [
            # 搞笑娱乐类
            "搞笑合集", "沙雕日常", "经典段子", "神回复现场", "翻车现场", "恶搞系列",
            "沙雕挑战", "搞笑配音", "段子合集", "神评论大赏", "翻车合集", "恶搞实验",
            "沙雕网友", "段子手合集", "恶搞挑战", "搞笑日常", "沙雕操作", "神评论合集", "恶搞配音",
            "沙雕实验", "搞笑萌宠", "社死现场", "尴尬瞬间", "神操作", "翻车合集",
            
            # 影视综艺类
            "影视吐槽", "综艺吐槽", "剧情解说", "反转神剧", "爽剧推荐", "爽剧解说",
            "综艺名场面", "剧情反转", "爽文短剧", "影视推荐", "韩剧解说", "美剧推荐",
            "国产剧推荐", "经典港片", "电影解说", "电视剧推荐", "综艺推荐", "真人秀",
            
            # 游戏电竞类
            "游戏解说", "游戏攻略", "游戏翻车", "游戏", "电竞解说", "游戏直播",
            "王者荣耀", "和平精英", "原神", "LOL", "FPS游戏", "MOBA游戏",
            "游戏技巧", "游戏攻略", "游戏挑战", "游戏翻车", "游戏搞笑", "游戏解说",
            
            # 颜值穿搭类
            "颜值日常", "美女写真", "帅哥写真", "穿搭打卡", "宅舞", "擦边舞蹈",
            "OOTD", "JK制服", "汉服", "cosplay", "舞室练习", "气质美女",
            "健身型男", "妆造教程", "穿搭分享", "时尚潮流", "美妆教程", "护肤分享",
            
            # 萌宠治愈类
            "萌宠日常", "萌宠", "萌娃", "搞笑萌宠", "治愈萌宠", "萌宠搞笑",
            "猫咪日常", "狗狗日常", "仓鼠日常", "异宠日常", "萌宠合集", "治愈系",
            
            # 美食探店类
            "美食探店", "奇葩美食", "美食", "探店", "美食制作", "美食挑战",
            "街头美食", "网红美食", "地方特色", "美食测评", "美食教程", "美食分享",
            
            # 音乐舞蹈类
            "音乐分享", "翻唱", "洗脑神曲", "舞蹈挑战", "手势舞", "音乐",
            "原创音乐", "音乐制作", "乐器演奏", "音乐教学", "舞蹈教学", "音乐现场",
            
            # 生活实用类
            "生活小技巧", "职场干货", "情感故事", "生活", "技巧", "实用技巧",
            "职场技能", "理财知识", "健康养生", "家庭教育", "心理知识", "法律知识",
            
            # 知识科普类
            "知识科普", "科技前沿", "科技", "知识", "科普", "科学实验",
            "历史趣闻", "文化知识", "地理知识", "生物知识", "物理知识", "化学知识",
            
            # 旅行户外类
            "旅行vlog", "旅行", "vlog", "户外探险", "自驾游", "背包客",
            "城市探索", "自然风光", "人文景观", "旅行攻略", "旅行分享", "户外运动",
            
            # 健身运动类
            "健身打卡", "健身", "运动", "瑜伽", "跑步", "游泳", "骑行",
            "健身教程", "运动技巧", "减肥分享", "塑形教程", "运动挑战", "健身日常",
            
            # 教育学习类
            "教育", "学习", "考试", "考研", "英语学习", "编程教学",
            "技能学习", "语言学习", "学习方法", "学习技巧", "考试技巧", "学习分享",
            
            # 热点时事类
            "热点追踪", "今日热点", "时事评论", "社会热点", "新闻解读", "热点分析",
            "明星八卦", "网红资讯", "社会新闻", "国际新闻", "财经新闻", "科技新闻",
            
            # 情感心理类
            "情感故事", "心理分析", "情感咨询", "恋爱技巧", "婚姻生活", "家庭关系",
            "心理健康", "情感治愈", "心理测试", "情感分享", "心理知识", "情感建议",
            
            # 手工创意类
            "手工制作", "创意DIY", "手工教程", "创意设计", "艺术创作", "手工艺品",
            "绘画教程", "书法教学", "摄影技巧", "视频剪辑", "创意视频", "艺术分享",
            
            # 汽车科技类
            "汽车评测", "汽车知识", "汽车改装", "驾驶技巧", "汽车保养", "新车推荐",
            "科技产品", "数码评测", "手机测评", "电脑配置", "科技资讯", "数码科技",
            
            # 母婴育儿类
            "母婴知识", "育儿经验", "儿童教育", "亲子互动", "母婴用品", "育儿技巧",
            "儿童心理", "家庭教育", "亲子游戏", "儿童健康", "育儿分享", "母婴护理"
        ]
        
        # 标签池
        self.labels = [
            # 基础娱乐标签
            "搞笑", "沙雕", "段子", "神回复", "翻车现场", "恶搞", "社死", "尴尬", "神操作",
            "搞笑合集", "沙雕日常", "经典段子", "神回复现场", "翻车现场", "恶搞系列",
            "沙雕挑战", "搞笑配音", "段子合集", "神评论大赏", "翻车合集", "恶搞实验",
            "沙雕网友", "段子手合集", "恶搞挑战", "搞笑日常", "沙雕操作", "神评论合集",
            "恶搞配音", "沙雕实验", "搞笑萌宠", "社死现场", "尴尬瞬间", "神操作",
            
            # 影视综艺标签
            "影视吐槽", "综艺吐槽", "剧情解说", "反转神剧", "爽剧推荐", "爽剧解说",
            "综艺名场面", "剧情反转", "爽文短剧", "影视推荐", "韩剧解说", "美剧推荐",
            "国产剧推荐", "经典港片", "电影解说", "电视剧推荐", "综艺推荐", "真人秀",
            "剧情", "角色", "演员", "特效", "音乐", "画面", "结局", "反转", "彩蛋", "细节",
            "霸总", "甜宠", "悬疑", "穿越", "高燃混剪", "CP混剪", "名场面",
            
            # 游戏电竞标签
            "游戏", "电竞", "主播", "直播", "开黑", "上分", "排位", "段位", "王者", "吃鸡",
            "LOL", "王者荣耀", "和平精英", "原神", "崩坏", "明日方舟", "阴阳师",
            "FPS", "MOBA", "休闲小游戏", "游戏解说", "游戏攻略", "游戏翻车", "游戏技巧",
            "操作", "技巧", "攻略", "教学", "解说", "复盘", "分析", "战术", "策略",
            "装备", "技能", "天赋", "符文", "出装", "铭文", "皮肤", "英雄", "角色",
            "团战", "单杀", "双杀", "三杀", "四杀", "五杀", "超神", "连杀", "MVP",
            "翻盘", "逆风", "顺风", "碾压", "虐菜", "代练", "上分", "掉分", "坑货",
            "队友", "对手", "敌人", "野怪", "小兵", "塔", "水晶", "基地", "泉水",
            
            # 颜值穿搭标签
            "颜值", "穿搭", "OOTD", "写真", "宅舞", "JK制服", "汉服", "cos", "舞室练习", "气质",
            "美女写真", "帅哥写真", "穿搭打卡", "擦边舞蹈", "cosplay", "气质美女",
            "健身型男", "妆造教程", "穿搭分享", "时尚潮流", "美妆教程", "护肤分享",
            # 擦边相关标签（更容易点赞转发）
            "擦边", "性感", "诱惑", "美女", "帅哥", "身材", "大长腿", "小蛮腰", "马甲线",
            "腹肌", "胸肌", "翘臀", "美腿", "锁骨", "天鹅颈", "蜜桃臀",
            "比基尼", "泳装", "内衣", "丝袜", "高跟鞋", "短裙", "热裤", "露脐装",
            "湿身", "出水芙蓉", "撩人", "勾魂", "魅惑", "风情万种",
            
            # 萌宠治愈标签
            "萌宠", "萌娃", "猫咪", "狗狗", "仓鼠", "兔子", "小鸟", "金鱼", "乌龟", "龙猫", "刺猬",
            "萌宠日常", "萌宠", "萌娃", "搞笑萌宠", "治愈萌宠", "萌宠搞笑",
            "猫咪日常", "狗狗日常", "仓鼠日常", "异宠日常", "萌宠合集", "治愈系",
            "可爱", "治愈", "解压", "泪目", "高燃", "全程姨母笑",
            
            # 美食探店标签
            "美食", "料理", "烹饪", "下厨", "厨房", "菜谱", "教程", "步骤", "做法",
            "探店", "打卡", "种草", "拔草", "推荐", "避雷", "踩雷", "翻车",
            "美食探店", "奇葩美食", "美食制作", "美食挑战", "街头美食", "网红美食",
            "地方特色", "美食测评", "美食教程", "美食分享",
            "蛋糕", "面条", "饺子", "包子", "汤圆", "月饼", "火锅", "烧烤", "甜品", "家常菜",
            
            # 音乐舞蹈标签
            "音乐", "翻唱", "洗脑神曲", "舞蹈挑战", "手势舞", "音乐分享", "原创音乐",
            "音乐制作", "乐器演奏", "音乐教学", "舞蹈教学", "音乐现场",
            "歌曲", "舞蹈", "翻唱", "洗脑", "治愈", "节奏", "旋律", "表演", "挑战", "技巧",
            
            # 生活实用标签
            "生活", "技巧", "实用技巧", "职场", "理财", "健康", "养生", "家庭", "教育", "心理", "法律",
            "生活小技巧", "职场干货", "情感故事", "职场技能", "理财知识", "健康养生",
            "家庭教育", "心理知识", "法律知识", "减肥", "瘦身", "健身", "运动", "瑜伽", "跑步", "游泳", "骑行",
            "护肤", "化妆", "美妆", "穿搭", "时尚", "潮流", "搭配", "风格",
            
            # 知识科普标签
            "科技", "知识", "科普", "科学", "实验", "历史", "文化", "地理", "生物", "物理", "化学",
            "知识科普", "科技前沿", "科学实验", "历史趣闻", "文化知识", "地理知识",
            "生物知识", "物理知识", "化学知识", "技术", "发明", "创新", "原理", "应用", "未来", "智能", "数字",
            
            # 旅行户外标签
            "旅行", "vlog", "户外", "探险", "自驾", "背包", "城市", "自然", "风光", "人文", "景观",
            "旅行vlog", "户外探险", "自驾游", "背包客", "城市探索", "自然风光",
            "人文景观", "旅行攻略", "旅行分享", "户外运动",
            
            # 健身运动标签
            "健身", "运动", "瑜伽", "跑步", "游泳", "骑行", "减肥", "塑形", "挑战", "日常",
            "健身打卡", "健身教程", "运动技巧", "减肥分享", "塑形教程", "运动挑战", "健身日常",
            
            # 教育学习标签
            "教育", "学习", "考试", "考研", "英语", "编程", "技能", "语言", "方法", "技巧", "分享",
            "教育", "学习", "考试", "考研", "英语学习", "编程教学", "技能学习", "语言学习",
            "学习方法", "学习技巧", "考试技巧", "学习分享",
            
            # 热点时事标签
            "热点", "热搜", "爆款", "刷屏", "刷爆", "火遍全网", "全网热议", "明星", "网红", "博主",
            "大V", "KOL", "意见领袖", "流量", "粉丝", "八卦", "爆料", "内幕", "真相", "反转", "打脸",
            "真香", "真香定律", "热点追踪", "今日热点", "时事评论", "社会热点", "新闻解读", "热点分析",
            "明星八卦", "网红资讯", "社会新闻", "国际新闻", "财经新闻", "科技新闻",
            
            # 情感心理标签
            "情感", "恋爱", "单身", "脱单", "分手", "复合", "前任", "现任", "暗恋", "表白", "被表白",
            "拒绝", "接受", "异地恋", "网恋", "相亲", "催婚", "结婚", "离婚", "出轨", "小三",
            "渣男", "渣女", "绿茶", "白莲花", "家庭", "父母", "子女", "婆媳", "夫妻", "情侣",
            "朋友", "闺蜜", "兄弟", "情感故事", "心理分析", "情感咨询", "恋爱技巧", "婚姻生活",
            "家庭关系", "心理健康", "情感治愈", "心理测试", "情感分享", "心理知识", "情感建议",
            
            # 手工创意标签
            "手工", "DIY", "创意", "设计", "艺术", "创作", "工艺品", "绘画", "书法", "摄影", "剪辑",
            "手工制作", "创意DIY", "手工教程", "创意设计", "艺术创作", "手工艺品",
            "绘画教程", "书法教学", "摄影技巧", "视频剪辑", "创意视频", "艺术分享",
            
            # 汽车科技标签
            "汽车", "评测", "知识", "改装", "驾驶", "保养", "新车", "科技", "产品", "数码", "手机", "电脑",
            "汽车评测", "汽车知识", "汽车改装", "驾驶技巧", "汽车保养", "新车推荐",
            "科技产品", "数码评测", "手机测评", "电脑配置", "科技资讯", "数码科技",
            
            # 母婴育儿标签
            "母婴", "育儿", "儿童", "教育", "亲子", "互动", "用品", "技巧", "心理", "家庭", "游戏", "健康",
            "母婴知识", "育儿经验", "儿童教育", "亲子互动", "母婴用品", "育儿技巧",
            "儿童心理", "家庭教育", "亲子游戏", "儿童健康", "育儿分享", "母婴护理",
            
            # 二次元动漫标签
            "二次元", "动漫", "番剧", "新番", "完结", "追番", "补番", "推荐", "安利",
            "手办", "周边", "同人", "本子", "图包", "壁纸", "头像", "表情包",
            "声优", "CV", "配音", "主题曲", "OP", "ED", "BGM", "插曲",
            "人设", "画风", "制作", "经费", "崩坏", "作画", "分镜", "手书", "AMV", "MAD",
            
            # 其他热门标签
            "短视频", "竖屏剧场", "一口气看完", "3分钟系列", "挑战", "合拍", "duet", "react", "投票",
            "今日热点", "520", "毕业季", "世界杯", "跨年", "春节档", "上热门", "宝藏博主", "关注我",
            "广告", "植入", "联名", "开箱测评", "直播带货", "宿舍日常", "打工日记", "老板来了",
            "闺蜜", "男友视角", "熊孩子", "高能时刻", "搞笑击杀", "沙雕MOD", "彩蛋", "奇葩美食", "街头实验"
        ]
        
    def generate_realistic_title(self, category, labels):
        """生成真实的视频标题"""
        # 根据分类和标签确定内容类型
        # 在互动分布阶段仅基于分类推断内容类型
        content_type = self._determine_content_type(category, [])
        
        # 根据分类选择更具体的标题模板
        category_templates = {
            "搞笑合集": ["笑死我了！{content}", "这个{content}太沙雕了", "哈哈哈哈{content}", "笑到肚子疼的{content}"],
            "沙雕日常": ["沙雕网友的{content}", "这个{content}太沙雕了", "沙雕操作：{content}", "网友的{content}太沙雕了"],
            "萌宠日常": ["我家{content}太可爱了", "这个{content}成精了", "网友家的{content}", "我家{content}又闯祸了"],
            "游戏解说": ["这个{content}太强了！", "网友的{content}操作", "这个{content}太秀了", "挑战{content}，失败了"],
            "影视推荐": ["这个{content}太精彩了", "网友推荐的{content}", "这个{content}太感人了", "网友的{content}分析"],
            "美食探店": ["今天做{content}，结果...", "挑战{content}，翻车了", "这个{content}太香了！", "第一次做{content}"],
            "音乐分享": ["这个{content}太洗脑了", "网友翻唱{content}", "这个{content}太治愈了", "挑战{content}，成功了！"],
            "科技前沿": ["这个{content}太厉害了", "网友的{content}实验", "这个{content}太神奇了", "挑战{content}，成功了！"],
            "生活小技巧": ["这个{content}太实用了", "网友的{content}技巧", "这个{content}太简单了", "第一次{content}"],
            "旅行vlog": ["这个{content}太美了", "网友的{content}之旅", "这个{content}太治愈了", "挑战{content}，成功了！"]
        }
        
        # 选择标题模板
        if category in category_templates:
            template = random.choice(category_templates[category])
        elif content_type in self.title_templates:
            template = random.choice(self.title_templates[content_type])
        else:
            # 通用标题模板
            template = random.choice([
                "这个{content}太{adjective}了！",
                "网友的{content}",
                "第一次{content}",
                "挑战{content}",
                "这个{content}绝了"
            ])
        
        # 选择关键词
        if content_type in self.content_keywords:
            keyword = random.choice(self.content_keywords[content_type])
        else:
            keyword = random.choice(["内容", "操作", "技巧", "实验", "挑战"])
        
        # 选择形容词
        adjective = random.choice(["厉害", "强", "秀", "牛", "绝", "棒", "赞", "酷", "帅", "美", "神奇", "实用"])
        
        # 生成标题
        if "{adjective}" in template:
            return template.format(content=keyword, adjective=adjective)
        else:
            return template.format(content=keyword)
    
    def _determine_content_type(self, category, labels):
        """根据分类和标签确定内容类型"""
        if any(keyword in category for keyword in ["搞笑", "沙雕", "段子", "恶搞", "翻车"]):
            return "搞笑类"
        elif any(keyword in category for keyword in ["颜值", "写真", "穿搭", "帅哥", "美女", "宅舞"]):
            return "颜值类"
        elif any(keyword in category for keyword in ["美食", "探店", "料理"]):
            return "美食类"
        elif any(keyword in category for keyword in ["萌宠", "宠物", "动物"]):
            return "萌宠类"
        elif any(keyword in category for keyword in ["游戏", "攻略", "解说"]):
            return "游戏类"
        elif any(keyword in category for keyword in ["影视", "剧情", "推荐", "吐槽"]):
            return "影视类"
        elif any(keyword in category for keyword in ["音乐", "翻唱", "舞蹈", "手势舞", "洗脑神曲"]):
            return "音乐类"
        elif any(keyword in category for keyword in ["科技", "知识", "科普", "前沿"]):
            return "科技类"
        elif any(keyword in category for keyword in ["生活", "技巧", "职场", "情感", "历史", "旅行", "vlog", "健身", "美妆"]):
            return "生活类"
        else:
            return "搞笑类"  # 默认类型
    
    def generate_realistic_interaction_data(self, category, duration, publish_time, labels=None):
        """生成真实互动数据（曝光→观看→互动管道 + 热度驱动 + 标签偏好）"""
        if labels is None:
            labels = []
            
        # 1) 分类基准
        category_exposure_boost = {
            "搞笑合集": 1.3, "沙雕日常": 1.2, "经典段子": 1.1, "神回复现场": 1.2,
            "翻车现场": 1.3, "恶搞系列": 1.2, "影视吐槽": 1.0, "综艺吐槽": 1.0,
            "游戏解说": 0.9, "剧情解说": 0.9, "反转神剧": 1.0, "爽剧推荐": 1.0,
            "萌宠日常": 1.1, "美食探店": 1.0, "游戏攻略": 0.8, "生活小技巧": 0.9,
            "颜值日常": 1.4, "美女写真": 1.5, "帅哥写真": 1.3, "穿搭打卡": 1.2,
            "宅舞": 1.3, "擦边舞蹈": 1.6  # 擦边内容曝光更高
        }
        exposure_boost = category_exposure_boost.get(category, 1.0)

        # 2) 时长与时效
        duration_shortness = max(0.0, min(1.0, (120 - duration) / 120))  # 越短越接近1
        publish_dt = pd.to_datetime(publish_time)
        days_ago = (datetime.now() - publish_dt).days
        freshness = max(0.2, 1.0 - days_ago / 30 * 0.7)

        # 3) 热度（右偏）
        # 调整热度分散度（稍收敛），控制长尾强度
        popularity = np.random.lognormal(mean=np.log(1.0), sigma=1.0)

        # 4) 曝光（随热度单调增加）
        # 下调基础曝光量级，目标中位数≈千级、95分位≈万级
        base_exposure = np.random.lognormal(mean=np.log(40000), sigma=0.55)
        exposures = base_exposure * (popularity ** 1.25) * (0.6 + 0.4 * freshness) * (0.6 + 0.4 * exposure_boost)
        exposures = int(max(10, min(20_000_000, exposures)))

        # 5) 观看率 CTR（sigmoid），短视频、热度、新鲜度更高
        def sigmoid(x):
            return 1.0 / (1.0 + np.exp(-x))

        # 线性项合成到logit空间，再映射到[ctr_min, ctr_max]
        z_ctr = -2.0 + 0.9 * duration_shortness + 0.6 * np.log1p(popularity) + 0.8 * (freshness - 0.5)
        ctr_base = sigmoid(z_ctr)
        # 稍收敛观看率上限
        ctr_min, ctr_max = 0.02, 0.40
        ctr = ctr_min + (ctr_max - ctr_min) * ctr_base

        views = int(np.random.binomial(exposures, max(0.0, min(1.0, ctr))))

        # 6) 基于标签的互动偏好调整
        label_bonuses = self._calculate_label_bonuses(labels)
        
        # 7) 内容类型，决定三率的偏好
        content_type = self._determine_content_type(category, labels)
        
        # 点赞率（基础 + 标签加成）
        z_like = -2.2 + 0.7 * np.log1p(popularity) + 0.3 * (freshness - 0.5)
        like_rate = 0.02 + (0.35 - 0.02) * sigmoid(z_like)
        like_rate = min(0.8, like_rate + label_bonuses['like_bonus'])  # 加上标签加成
        
        # 收藏率（实用类更高 + 标签加成）
        util_bonus = 0.25 if content_type in ["生活类", "美食类"] else 0.0
        z_fav = -2.4 + 0.5 * np.log1p(popularity) + util_bonus
        fav_rate = 0.03 + (0.55 - 0.03) * sigmoid(z_fav)
        fav_rate = min(0.7, fav_rate + label_bonuses['favorite_bonus'])  # 加上标签加成
        
        # 转发率（搞笑/热点更高 + 标签加成）
        viral_bonus = 0.35 if content_type in ["搞笑类", "影视类"] else 0.0
        z_rep = -2.6 + 0.55 * np.log1p(popularity) + viral_bonus
        rep_rate = 0.02 + (0.65 - 0.02) * sigmoid(z_rep)
        rep_rate = min(0.8, rep_rate + label_bonuses['repost_bonus'])  # 加上标签加成

        # 8) 计数抽样
        likes = int(np.random.binomial(views, max(0.0, min(1.0, like_rate))))
        favorites = int(np.random.binomial(views, max(0.0, min(1.0, fav_rate))))
        reposts = int(np.random.binomial(views, max(0.0, min(1.0, rep_rate))))

        # 9) 少量极端事件（爆款二次传播/实用收藏激增）
        if np.random.rand() < 0.01 and views > 0:
            # 二次爆发：转发推动更多曝光，放大量级
            boost = min(5.0, np.random.pareto(1.7) + 1)
            reposts = int(reposts * boost)
            likes = int(likes * np.random.uniform(1.2, 1.8))
        if content_type in ["生活类", "美食类"] and np.random.rand() < 0.02 and views > 0:
            favorites = int(favorites * np.random.uniform(1.3, 2.0))

        return {
            'likes': max(0, likes),
            'favorites': max(0, favorites),
            'reposts': max(0, reposts)
        }
    
    def _calculate_label_bonuses(self, labels):
        """根据标签计算互动加成"""
        if not labels:
            return {'like_bonus': 0, 'favorite_bonus': 0, 'repost_bonus': 0}
        
        # 标签互动偏好配置
        label_preferences = {
            # 擦边/颜值类标签 - 更容易点赞和转发
            "颜值": {'like': 0.15, 'favorite': 0.05, 'repost': 0.20},
            "写真": {'like': 0.12, 'favorite': 0.08, 'repost': 0.15},
            "宅舞": {'like': 0.10, 'favorite': 0.03, 'repost': 0.12},
            "擦边": {'like': 0.20, 'favorite': 0.02, 'repost': 0.25},
            "气质": {'like': 0.08, 'favorite': 0.05, 'repost': 0.10},
            "穿搭": {'like': 0.06, 'favorite': 0.10, 'repost': 0.08},
            "OOTD": {'like': 0.05, 'favorite': 0.12, 'repost': 0.06},
            "JK制服": {'like': 0.08, 'favorite': 0.08, 'repost': 0.10},
            "汉服": {'like': 0.07, 'favorite': 0.15, 'repost': 0.08},
            "cos": {'like': 0.10, 'favorite': 0.05, 'repost': 0.12},
            
            # 游戏类标签 - 更容易评论和收藏
            "游戏": {'like': 0.05, 'favorite': 0.20, 'repost': 0.03},
            "FPS": {'like': 0.08, 'favorite': 0.25, 'repost': 0.05},
            "MOBA": {'like': 0.08, 'favorite': 0.25, 'repost': 0.05},
            "攻略": {'like': 0.03, 'favorite': 0.30, 'repost': 0.02},
            "解说": {'like': 0.05, 'favorite': 0.22, 'repost': 0.03},
            "挑战": {'like': 0.10, 'favorite': 0.15, 'repost': 0.08},
            "休闲小游戏": {'like': 0.06, 'favorite': 0.18, 'repost': 0.04},
            
            # 搞笑类标签 - 更容易转发
            "搞笑": {'like': 0.08, 'favorite': 0.05, 'repost': 0.20},
            "沙雕": {'like': 0.10, 'favorite': 0.03, 'repost': 0.25},
            "段子": {'like': 0.06, 'favorite': 0.05, 'repost': 0.18},
            "神回复": {'like': 0.12, 'favorite': 0.08, 'repost': 0.22},
            "翻车现场": {'like': 0.15, 'favorite': 0.05, 'repost': 0.30},
            "恶搞": {'like': 0.08, 'favorite': 0.03, 'repost': 0.20},
            "吐槽": {'like': 0.10, 'favorite': 0.05, 'repost': 0.15},
            
            # 萌宠类标签 - 更容易点赞和收藏
            "萌宠": {'like': 0.15, 'favorite': 0.20, 'repost': 0.08},
            "猫": {'like': 0.18, 'favorite': 0.25, 'repost': 0.10},
            "狗": {'like': 0.16, 'favorite': 0.22, 'repost': 0.08},
            "治愈": {'like': 0.12, 'favorite': 0.18, 'repost': 0.05},
            "可爱": {'like': 0.20, 'favorite': 0.15, 'repost': 0.06},
            
            # 音乐舞蹈类标签 - 更容易转发
            "音乐": {'like': 0.08, 'favorite': 0.10, 'repost': 0.15},
            "翻唱": {'like': 0.10, 'favorite': 0.12, 'repost': 0.18},
            "舞蹈挑战": {'like': 0.12, 'favorite': 0.08, 'repost': 0.20},
            "手势舞": {'like': 0.10, 'favorite': 0.06, 'repost': 0.15},
            "洗脑神曲": {'like': 0.15, 'favorite': 0.05, 'repost': 0.25},
            
            # 实用类标签 - 更容易收藏
            "生活": {'like': 0.05, 'favorite': 0.25, 'repost': 0.08},
            "小技巧": {'like': 0.06, 'favorite': 0.30, 'repost': 0.10},
            "职场": {'like': 0.04, 'favorite': 0.28, 'repost': 0.12},
            "实用": {'like': 0.05, 'favorite': 0.32, 'repost': 0.15},
            "教程": {'like': 0.06, 'favorite': 0.35, 'repost': 0.18},
            
            # 热点类标签 - 更容易转发
            "热点追踪": {'like': 0.08, 'favorite': 0.05, 'repost': 0.30},
            "今日热点": {'like': 0.10, 'favorite': 0.03, 'repost': 0.35},
            "吃瓜第一线": {'like': 0.12, 'favorite': 0.02, 'repost': 0.40},
            "明星同款": {'like': 0.15, 'favorite': 0.08, 'repost': 0.25},
            
            # 情感类标签 - 更容易点赞和转发
            "泪目": {'like': 0.20, 'favorite': 0.10, 'repost': 0.15},
            "治愈": {'like': 0.12, 'favorite': 0.18, 'repost': 0.05},
            "高燃": {'like': 0.15, 'favorite': 0.08, 'repost': 0.20},
            "全程姨母笑": {'like': 0.18, 'favorite': 0.05, 'repost': 0.12},
            
            # 二次元标签 - 更容易收藏和转发
            "二次元": {'like': 0.08, 'favorite': 0.20, 'repost': 0.15},
            "手书": {'like': 0.10, 'favorite': 0.25, 'repost': 0.18},
            "AMV": {'like': 0.12, 'favorite': 0.22, 'repost': 0.20},
            "MAD": {'like': 0.10, 'favorite': 0.20, 'repost': 0.15},
        }
        
        # 计算总加成
        like_bonus = 0
        favorite_bonus = 0
        repost_bonus = 0
        
        for label in labels:
            if label in label_preferences:
                like_bonus += label_preferences[label]['like']
                favorite_bonus += label_preferences[label]['favorite']
                repost_bonus += label_preferences[label]['repost']
        
        # 限制最大加成，避免过高
        like_bonus = min(0.4, like_bonus)
        favorite_bonus = min(0.5, favorite_bonus)
        repost_bonus = min(0.6, repost_bonus)
        
        return {
            'like_bonus': like_bonus,
            'favorite_bonus': favorite_bonus,
            'repost_bonus': repost_bonus
        }
    
    def generate_realistic_author(self, category, labels):
        """生成真实的作者名称"""
        # 根据分类精确匹配作者
        category_authors = {
            "搞笑合集": ["搞笑小达人", "沙雕网友", "段子手联盟", "神回复bot", "翻车现场", "恶搞大师", "吐槽小能手"],
            "沙雕日常": ["沙雕日常君", "沙雕网友", "恶搞大师", "翻车现场记录员", "吐槽小能手"],
            "萌宠日常": ["萌宠搞笑君", "萌宠日常", "治愈系小仙女", "萌宠", "萌娃"],
            "游戏解说": ["游戏解说员", "游戏攻略君", "游戏萌新开", "游戏", "攻略"],
            "影视推荐": ["影视吐槽君", "剧情解说家", "影视", "剧情", "推荐"],
            "美食探店": ["美食翻车王", "美食", "探店", "生活"],
            "音乐分享": ["音乐分享", "音乐", "翻唱", "洗脑神曲"],
            "科技前沿": ["科技前沿", "科技", "知识", "科普"],
            "生活小技巧": ["生活小技巧", "生活", "技巧", "实用"],
            "旅行vlog": ["旅行vlog", "旅行", "vlog", "探店"],
            "健身打卡": ["健身打卡", "健身", "运动", "健康"],
            "美妆教程": ["美妆教程", "美妆", "化妆", "教程"],
            "知识科普": ["知识科普", "知识", "科普", "教育"],
            "职场干货": ["职场干货", "职场", "工作", "干货"],
            "情感故事": ["情感故事", "情感", "故事", "治愈"],
            "历史趣闻": ["历史趣闻", "历史", "趣闻", "文化"]
            ,
            # 新增颜值/穿搭类作者池
            "颜值日常": ["穿搭博主", "妆造达人", "健身型男", "气质小姐姐"],
            "美女写真": ["写真摄影师", "美妆教程", "气质小姐姐", "时尚ICON"],
            "帅哥写真": ["健身型男", "穿搭博主", "人物写真", "潮流男神"],
            "穿搭打卡": ["穿搭博主", "时尚ICON", "妆造达人", "OOTD达人"],
            "宅舞": ["舞蹈挑战", "宅舞达人", "手势舞", "舞室练习生"],
            "擦边舞蹈": ["舞蹈挑战", "宅舞达人", "高燃剪辑师", "舞室练习生"]
        }
        
        # 精确匹配分类
        if category in category_authors:
            author_pool = category_authors[category]
        else:
            # 模糊匹配
            if any(keyword in category for keyword in ["搞笑", "沙雕", "段子", "恶搞"]):
                author_pool = [author for author in self.authors if any(keyword in author for keyword in ["搞笑", "沙雕", "段子", "恶搞", "吐槽", "翻车"])]
            elif any(keyword in category for keyword in ["萌宠", "宠物"]):
                author_pool = [author for author in self.authors if any(keyword in author for keyword in ["萌宠", "宠物", "治愈"])]
            elif any(keyword in category for keyword in ["美食", "探店"]):
                author_pool = [author for author in self.authors if any(keyword in author for keyword in ["美食", "探店", "生活"])]
            elif any(keyword in category for keyword in ["游戏", "攻略"]):
                author_pool = [author for author in self.authors if any(keyword in author for keyword in ["游戏", "攻略", "解说"])]
            elif any(keyword in category for keyword in ["影视", "剧情"]):
                author_pool = [author for author in self.authors if any(keyword in author for keyword in ["影视", "剧情", "推荐"])]
            elif any(keyword in category for keyword in ["音乐", "舞蹈"]):
                author_pool = [author for author in self.authors if any(keyword in author for keyword in ["音乐", "舞蹈", "翻唱"])]
            elif any(keyword in category for keyword in ["科技", "知识"]):
                author_pool = [author for author in self.authors if any(keyword in author for keyword in ["科技", "知识", "科普"])]
            else:
                author_pool = self.authors
        
        return random.choice(author_pool)
    
    def generate_realistic_duration(self, category):
        """生成真实的视频时长（秒） - 根据类型设置不同的均值"""
        # 根据内容类型确定时长参数
        content_type = self._determine_content_type(category, [])
        
        # 不同类型视频的时长参数设置
        duration_configs = {
            "搞笑类": {"mean": 45, "sigma": 0.3, "min": 15, "max": 90},      # 搞笑类：30-60秒
            "影视类": {"mean": 180, "sigma": 0.4, "min": 60, "max": 300},    # 影视类：2-5分钟
            "游戏类": {"mean": 120, "sigma": 0.35, "min": 45, "max": 240},   # 游戏类：1-3分钟
            "萌宠类": {"mean": 60, "sigma": 0.3, "min": 20, "max": 120},     # 萌宠类：30-90秒
            "美食类": {"mean": 150, "sigma": 0.4, "min": 60, "max": 300},    # 美食类：1-4分钟
            "颜值类": {"mean": 60, "sigma": 0.3, "min": 20, "max": 120},     # 颜值类：30-90秒
            "音乐类": {"mean": 90, "sigma": 0.35, "min": 30, "max": 180},    # 音乐类：30-120秒
            "生活类": {"mean": 120, "sigma": 0.35, "min": 45, "max": 240},   # 生活类：1-3分钟
            "科技类": {"mean": 120, "sigma": 0.35, "min": 45, "max": 240},   # 科技类：1-3分钟
        }
        
        # 获取对应类型的配置，默认为搞笑类
        config = duration_configs.get(content_type, duration_configs["搞笑类"])
        
        # 计算对数正态分布的参数
        # 对于对数正态分布：如果 X ~ LogNormal(μ, σ)，则 E[X] = exp(μ + σ²/2)
        # 所以 μ = ln(mean) - σ²/2
        mu = np.log(config["mean"]) - 0.5 * (config["sigma"] ** 2)
        
        # 生成时长
        val = np.random.lognormal(mean=mu, sigma=config["sigma"])
        duration = int(np.clip(val, config["min"], config["max"]))
        
        return duration
    
    def generate_realistic_publish_time(self):
        """生成真实的发布时间 - 近五年多峰分布（当前为2025年9月，近期视频更多）"""
        # 更符合用户行为的时间分布
        # 设置当前时间为2025年9月
        current_year = 2025
        current_month = 9
        now = datetime(current_year, current_month, 1)  # 2025年9月1日作为当前时间
        start_date = datetime(2020, 1, 1)  # 2020年1月1日开始，近五年
        
        # 多峰分布权重 - 基于真实用户活跃时段
        # 0-6点: 0.1 (深夜低活跃)
        # 6-8点: 0.4 (早高峰)
        # 8-12点: 0.6 (上午活跃)
        # 12-14点: 0.8 (午休高峰)
        # 14-17点: 0.3 (下午一般)
        # 17-19点: 0.5 (下班高峰)
        # 19-22点: 1.0 (晚间高峰)
        # 22-24点: 0.4 (睡前活跃)
        hour_weights = [0.1] * 6 + [0.4] * 2 + [0.6] * 4 + [0.8] * 2 + [0.3] * 3 + [0.5] * 2 + [1.0] * 3 + [0.4] * 2
        
        # 计算从2020年1月1日到2025年9月1日的总天数
        total_days = (now - start_date).days
        
        # 使用反向指数分布让靠近当前时间的视频更多
        # 先生成0到1之间的随机数，然后反向映射到时间轴上
        # 这样可以让近期视频概率更高
        random_ratio = np.random.power(3)  # 使用power分布，指数为3，让靠近1的值概率更高
        random_days = int(random_ratio * total_days)  # 映射到总天数范围内
        
        random_hour = random.choices(range(24), weights=hour_weights)[0]
        random_minute = random.randint(0, 59)
        random_second = random.randint(0, 59)
        
        publish_time = start_date + timedelta(days=random_days, hours=random_hour, minutes=random_minute, seconds=random_second)
        
        # 确保不超过当前时间（2025年9月）
        if publish_time > now:
            publish_time = now
        
        return publish_time.strftime("%Y-%m-%d %H:%M:%S")
    
    def generate_video_data(self):
        """生成视频数据"""
        data = []
        
        # 定义内容类型和对应的分类、作者、标题模板
        content_types = [
            {
                "type": "搞笑",
                "categories": ["搞笑合集", "沙雕日常", "段子合集", "神回复现场", "翻车现场", "恶搞系列", "沙雕挑战", "搞笑配音", "神评论大赏", "社死现场", "尴尬瞬间"],
                "authors": ["搞笑小达人", "沙雕网友", "段子手联盟", "神回复bot", "翻车现场", "恶搞大师", "吐槽小能手", "神操作", "社死现场"],
                "titles": ["笑死我了！{content}", "这个{content}太沙雕了", "哈哈哈哈{content}", "笑到肚子疼的{content}", "沙雕网友的{content}", "社死现场：{content}", "这个{content}太尴尬了"],
                "keywords": ["段子", "神回复", "翻车", "沙雕", "恶搞", "吐槽", "神评论", "网友", "日常", "操作", "社死", "尴尬"]
            },
            {
                "type": "颜值",
                "categories": ["颜值日常", "美女写真", "帅哥写真", "穿搭打卡", "宅舞", "擦边舞蹈", "OOTD", "JK制服", "汉服", "cosplay", "气质美女", "健身型男"],
                "authors": ["气质小姐姐", "健身型男", "妆造达人", "穿搭博主", "舞室练习生", "JK制服", "汉服", "cosplay", "时尚ICON"],
                "titles": ["这个{content}太好看了", "网友的{content}穿搭", "这个{content}太绝了", "今天的{content}", "我的{content}日常", "挑战{content}，成功了！", "这个{content}太美了"],
                "keywords": ["穿搭", "OOTD", "写真", "宅舞", "汉服", "JK制服", "妆造", "舞蹈", "练习", "气质", "颜值", "cosplay"]
            },
            {
                "type": "萌宠",
                "categories": ["搞笑萌宠", "萌宠日常", "萌宠", "萌娃", "治愈萌宠", "猫咪日常", "狗狗日常", "仓鼠日常", "异宠日常"],
                "authors": ["萌宠搞笑君", "萌宠日常", "治愈系小仙女", "萌宠", "萌娃", "猫咪日常", "狗狗日常", "异宠日常"],
                "titles": ["我家{content}太可爱了", "这个{content}成精了", "网友家的{content}", "我家{content}又闯祸了", "这个{content}太萌了", "治愈系{content}", "这个{content}太治愈了"],
                "keywords": ["猫咪", "狗狗", "仓鼠", "兔子", "小鸟", "金鱼", "乌龟", "龙猫", "刺猬", "可爱", "治愈", "萌宠"]
            },
            {
                "type": "游戏",
                "categories": ["游戏解说", "游戏攻略", "游戏翻车", "游戏", "电竞解说", "游戏直播", "王者荣耀", "和平精英", "原神", "LOL", "FPS游戏", "MOBA游戏"],
                "authors": ["游戏解说员", "游戏攻略君", "游戏萌新开", "游戏", "攻略", "电竞解说", "王者荣耀", "和平精英", "原神"],
                "titles": ["这个{content}太强了！", "网友的{content}操作", "这个{content}太秀了", "挑战{content}，失败了", "这个{content}太好玩了", "电竞{content}", "这个{content}太刺激了"],
                "keywords": ["操作", "技巧", "攻略", "翻车", "成功", "失败", "挑战", "解谜", "战斗", "建造", "电竞", "直播", "上分", "排位"]
            },
            {
                "type": "影视",
                "categories": ["影视推荐", "影视吐槽", "剧情解说", "剧情反转", "爽剧推荐", "韩剧解说", "美剧推荐", "国产剧推荐", "经典港片", "电影解说", "电视剧推荐", "综艺推荐"],
                "authors": ["影视吐槽君", "剧情解说家", "影视", "剧情", "推荐", "韩剧解说", "美剧推荐", "电影解说", "综艺推荐"],
                "titles": ["这个{content}太精彩了", "网友推荐的{content}", "这个{content}太感人了", "网友的{content}分析", "这个{content}太震撼了", "这个{content}太烧脑了", "这个{content}太爽了"],
                "keywords": ["剧情", "角色", "演员", "特效", "音乐", "画面", "结局", "反转", "彩蛋", "细节", "韩剧", "美剧", "国产剧", "经典港片"]
            },
            {
                "type": "美食",
                "categories": ["美食探店", "奇葩美食", "美食", "探店", "美食制作", "美食挑战", "街头美食", "网红美食", "地方特色", "美食测评", "美食教程"],
                "authors": ["美食翻车王", "美食", "探店", "生活", "街头美食", "网红美食", "地方特色", "美食测评"],
                "titles": ["今天做{content}，结果...", "挑战{content}，翻车了", "这个{content}太香了！", "第一次做{content}", "网友推荐的{content}", "街头{content}", "网红{content}"],
                "keywords": ["蛋糕", "面条", "饺子", "包子", "汤圆", "月饼", "火锅", "烧烤", "甜品", "家常菜", "街头美食", "网红美食", "地方特色"]
            },
            {
                "type": "音乐",
                "categories": ["音乐分享", "翻唱", "洗脑神曲", "舞蹈挑战", "手势舞", "原创音乐", "音乐制作", "乐器演奏", "音乐教学", "舞蹈教学"],
                "authors": ["音乐分享", "音乐", "翻唱", "洗脑神曲", "原创音乐", "音乐制作", "乐器演奏", "音乐教学"],
                "titles": ["这个{content}太洗脑了", "网友翻唱{content}", "这个{content}太治愈了", "挑战{content}，成功了！", "这个{content}太棒了", "原创{content}", "这个{content}太专业了"],
                "keywords": ["歌曲", "舞蹈", "翻唱", "洗脑", "治愈", "节奏", "旋律", "表演", "挑战", "技巧", "原创", "乐器", "音乐制作"]
            },
            {
                "type": "科技",
                "categories": ["科技前沿", "知识科普", "科技", "知识", "科普", "科学实验", "历史趣闻", "文化知识", "地理知识", "生物知识", "物理知识", "化学知识"],
                "authors": ["科技前沿", "科技", "知识", "科普", "历史趣闻", "文化知识", "地理知识", "生物知识"],
                "titles": ["这个{content}太厉害了", "网友的{content}实验", "这个{content}太神奇了", "挑战{content}，成功了！", "这个{content}太实用了", "科普{content}", "这个{content}太有趣了"],
                "keywords": ["实验", "技术", "发明", "创新", "科学", "原理", "应用", "未来", "智能", "数字", "历史", "文化", "地理", "生物", "物理", "化学"]
            },
            {
                "type": "生活",
                "categories": ["生活小技巧", "职场干货", "情感故事", "生活", "技巧", "实用技巧", "职场技能", "理财知识", "健康养生", "家庭教育", "心理知识", "法律知识"],
                "authors": ["生活小技巧", "生活", "技巧", "实用", "职场技能", "理财知识", "健康养生", "家庭教育", "心理知识"],
                "titles": ["这个{content}太实用了", "网友的{content}技巧", "这个{content}太简单了", "第一次{content}", "这个{content}太有用了", "职场{content}", "理财{content}"],
                "keywords": ["技巧", "方法", "经验", "心得", "建议", "教程", "步骤", "过程", "结果", "效果", "职场", "理财", "健康", "养生", "家庭", "心理", "法律"]
            },
            {
                "type": "旅行",
                "categories": ["旅行vlog", "旅行", "vlog", "户外探险", "自驾游", "背包客", "城市探索", "自然风光", "人文景观", "旅行攻略", "旅行分享", "户外运动"],
                "authors": ["旅行vlog", "旅行", "vlog", "户外探险", "自驾游", "背包客", "城市探索", "自然风光"],
                "titles": ["这个{content}太美了", "网友的{content}之旅", "这个{content}太治愈了", "挑战{content}，成功了！", "这个{content}太震撼了", "探索{content}", "这个{content}太壮观了"],
                "keywords": ["旅行", "vlog", "户外", "探险", "自驾", "背包", "城市", "自然", "风光", "人文", "景观", "攻略", "分享", "运动"]
            },
            {
                "type": "健身",
                "categories": ["健身打卡", "健身", "运动", "瑜伽", "跑步", "游泳", "骑行", "健身教程", "运动技巧", "减肥分享", "塑形教程", "运动挑战", "健身日常"],
                "authors": ["健身打卡", "健身", "运动", "瑜伽", "跑步", "游泳", "骑行", "健身教程", "运动技巧"],
                "titles": ["这个{content}太有效了", "网友的{content}挑战", "这个{content}太燃了", "挑战{content}，成功了！", "这个{content}太专业了", "健身{content}", "这个{content}太棒了"],
                "keywords": ["健身", "运动", "瑜伽", "跑步", "游泳", "骑行", "减肥", "塑形", "挑战", "日常", "教程", "技巧", "分享"]
            },
            {
                "type": "教育",
                "categories": ["教育", "学习", "考试", "考研", "英语学习", "编程教学", "技能学习", "语言学习", "学习方法", "学习技巧", "考试技巧", "学习分享"],
                "authors": ["教育", "学习", "考试", "考研", "英语学习", "编程教学", "技能学习", "语言学习"],
                "titles": ["这个{content}太有用了", "网友的{content}方法", "这个{content}太实用了", "学习{content}", "这个{content}太有效了", "考试{content}", "这个{content}太棒了"],
                "keywords": ["教育", "学习", "考试", "考研", "英语", "编程", "技能", "语言", "方法", "技巧", "分享", "教程", "知识"]
            },
            {
                "type": "热点",
                "categories": ["热点追踪", "今日热点", "时事评论", "社会热点", "新闻解读", "热点分析", "明星八卦", "网红资讯", "社会新闻", "国际新闻", "财经新闻", "科技新闻"],
                "authors": ["热点追踪", "今日热点", "时事评论", "社会热点", "新闻解读", "明星八卦", "网红资讯", "社会新闻"],
                "titles": ["这个{content}太火了", "网友热议{content}", "这个{content}太震撼了", "热点{content}", "这个{content}太有料了", "新闻{content}", "这个{content}太劲爆了"],
                "keywords": ["热点", "热搜", "爆款", "刷屏", "明星", "网红", "博主", "八卦", "爆料", "新闻", "时事", "社会", "国际", "财经", "科技"]
            },
            {
                "type": "情感",
                "categories": ["情感故事", "心理分析", "情感咨询", "恋爱技巧", "婚姻生活", "家庭关系", "心理健康", "情感治愈", "心理测试", "情感分享", "心理知识", "情感建议"],
                "authors": ["情感故事", "心理分析", "情感咨询", "恋爱技巧", "婚姻生活", "家庭关系", "心理健康", "情感治愈"],
                "titles": ["这个{content}太感人了", "网友的{content}故事", "这个{content}太治愈了", "情感{content}", "这个{content}太有道理了", "心理{content}", "这个{content}太暖了"],
                "keywords": ["情感", "恋爱", "单身", "脱单", "分手", "复合", "前任", "现任", "暗恋", "表白", "家庭", "父母", "子女", "夫妻", "情侣", "朋友", "闺蜜", "兄弟", "心理", "治愈"]
            },
            {
                "type": "手工",
                "categories": ["手工制作", "创意DIY", "手工教程", "创意设计", "艺术创作", "手工艺品", "绘画教程", "书法教学", "摄影技巧", "视频剪辑", "创意视频", "艺术分享"],
                "authors": ["手工制作", "创意DIY", "手工教程", "创意设计", "艺术创作", "手工艺品", "绘画教程", "书法教学", "摄影技巧"],
                "titles": ["这个{content}太有创意了", "网友的{content}作品", "这个{content}太美了", "手工{content}", "这个{content}太精致了", "创意{content}", "这个{content}太艺术了"],
                "keywords": ["手工", "DIY", "创意", "设计", "艺术", "创作", "工艺品", "绘画", "书法", "摄影", "剪辑", "视频", "分享", "教程", "技巧"]
            },
            {
                "type": "汽车",
                "categories": ["汽车评测", "汽车知识", "汽车改装", "驾驶技巧", "汽车保养", "新车推荐", "科技产品", "数码评测", "手机测评", "电脑配置", "科技资讯", "数码科技"],
                "authors": ["汽车评测", "汽车知识", "汽车改装", "驾驶技巧", "汽车保养", "新车推荐", "科技产品", "数码评测", "手机测评"],
                "titles": ["这个{content}太强了", "网友的{content}评测", "这个{content}太专业了", "汽车{content}", "这个{content}太实用了", "科技{content}", "这个{content}太先进了"],
                "keywords": ["汽车", "评测", "知识", "改装", "驾驶", "保养", "新车", "科技", "产品", "数码", "手机", "电脑", "配置", "资讯", "科技"]
            },
            {
                "type": "母婴",
                "categories": ["母婴知识", "育儿经验", "儿童教育", "亲子互动", "母婴用品", "育儿技巧", "儿童心理", "家庭教育", "亲子游戏", "儿童健康", "育儿分享", "母婴护理"],
                "authors": ["母婴知识", "育儿经验", "儿童教育", "亲子互动", "母婴用品", "育儿技巧", "儿童心理", "家庭教育"],
                "titles": ["这个{content}太有用了", "网友的{content}经验", "这个{content}太实用了", "育儿{content}", "这个{content}太贴心了", "亲子{content}", "这个{content}太温暖了"],
                "keywords": ["母婴", "育儿", "儿童", "教育", "亲子", "互动", "用品", "技巧", "心理", "家庭", "游戏", "健康", "分享", "护理", "知识", "经验"]
            }
        ]
        
        for i in range(self.output_size):
            # 生成视频ID
            vid = f"V{str(i + 1).zfill(4)}"
            
            # 随机选择一个内容类型
            content_type = random.choice(content_types)
            
            # 从该内容类型中选择分类
            category = random.choice(content_type["categories"])
            
            # 从该内容类型中选择作者
            author = random.choice(content_type["authors"])
            
            # 从该内容类型中选择标题模板
            title_template = random.choice(content_type["titles"])
            
            # 从该内容类型中选择关键词
            keyword = random.choice(content_type["keywords"])
            
            # 生成标题
            title = title_template.format(content=keyword)
            
            # 生成标签
            labels = self._generate_labels(category)
            
            # 生成时长
            duration = self.generate_realistic_duration(category)
            
            # 生成发布时间
            publish_time = self.generate_realistic_publish_time()
            
            # 生成互动数据
            interaction_data = self.generate_realistic_interaction_data(category, duration, publish_time, labels)
            
            data.append({
                "vid": vid,
                "title": title,
                "category": category,
                "duration": duration * 1000,  # 转换为毫秒
                "author": author,
                "publish_time": publish_time,
                "likes": interaction_data['likes'],
                "favorites": interaction_data['favorites'],
                "reposts": interaction_data['reposts'],
                "labels": ';'.join(labels)
            })
        
        return data
    
    def _generate_labels(self, category):
        """生成相关标签"""
        # 1) 精确映射（优先）
        exact_map = {
            # 搞笑娱乐类
            "搞笑合集": ["搞笑", "沙雕", "段子", "神回复", "神评论", "翻车现场", "恶搞"],
            "沙雕日常": ["沙雕", "搞笑", "日常", "社死", "尴尬", "神操作"],
            "翻车现场": ["翻车现场", "高能时刻", "社死", "尴尬癌", "搞笑"],
            "恶搞系列": ["恶搞", "吐槽", "段子", "神回复", "沙雕"],
            "神评论大赏": ["神评论", "神回复", "名场面", "搞笑"],
            "沙雕挑战": ["沙雕", "挑战", "搞笑", "恶搞"],
            "搞笑配音": ["搞笑", "配音", "沙雕", "恶搞"],
            "段子合集": ["段子", "搞笑", "神回复", "沙雕"],
            "神评论合集": ["神评论", "神回复", "搞笑", "段子"],
            "恶搞挑战": ["恶搞", "挑战", "搞笑", "沙雕"],
            "搞笑日常": ["搞笑", "日常", "沙雕", "段子"],
            "沙雕操作": ["沙雕", "操作", "搞笑", "神操作"],
            "恶搞配音": ["恶搞", "配音", "搞笑", "沙雕"],
            "沙雕实验": ["沙雕", "实验", "搞笑", "恶搞"],
            "搞笑萌宠": ["搞笑", "萌宠", "沙雕", "可爱"],
            "社死现场": ["社死", "尴尬", "搞笑", "沙雕"],
            "尴尬瞬间": ["尴尬", "社死", "搞笑", "沙雕"],
            
            # 游戏电竞类
            "游戏解说": ["游戏", "解说", "FPS", "MOBA", "攻略", "技巧"],
            "游戏攻略": ["游戏", "攻略", "挑战", "休闲小游戏", "技巧", "教学"],
            "游戏翻车": ["游戏", "翻车现场", "高能时刻", "搞笑"],
            "游戏": ["游戏", "FPS", "MOBA", "攻略", "技巧"],
            "电竞解说": ["电竞", "解说", "游戏", "技巧", "攻略"],
            "游戏直播": ["游戏", "直播", "电竞", "技巧"],
            "王者荣耀": ["王者荣耀", "游戏", "MOBA", "攻略", "技巧"],
            "和平精英": ["和平精英", "游戏", "FPS", "攻略", "技巧"],
            "原神": ["原神", "游戏", "攻略", "技巧", "二次元"],
            "LOL": ["LOL", "游戏", "MOBA", "攻略", "技巧"],
            "FPS游戏": ["FPS", "游戏", "射击", "技巧", "攻略"],
            "MOBA游戏": ["MOBA", "游戏", "策略", "技巧", "攻略"],
            
            # 影视综艺类
            "影视推荐": ["影视", "剧情", "爽剧", "名场面", "推荐"],
            "影视吐槽": ["影视", "吐槽", "彩蛋", "反转", "剧情"],
            "剧情解说": ["剧情", "解说", "名场面", "反转", "影视"],
            "剧情反转": ["剧情", "反转", "影视", "名场面"],
            "爽剧推荐": ["爽剧", "推荐", "影视", "剧情", "名场面"],
            "爽剧解说": ["爽剧", "解说", "影视", "剧情"],
            "综艺名场面": ["综艺", "名场面", "搞笑", "剧情"],
            "韩剧解说": ["韩剧", "解说", "剧情", "影视"],
            "美剧推荐": ["美剧", "推荐", "剧情", "影视"],
            "国产剧推荐": ["国产剧", "推荐", "剧情", "影视"],
            "经典港片": ["港片", "经典", "影视", "剧情"],
            "电影解说": ["电影", "解说", "剧情", "影视"],
            "电视剧推荐": ["电视剧", "推荐", "剧情", "影视"],
            "综艺推荐": ["综艺", "推荐", "搞笑", "娱乐"],
            "真人秀": ["真人秀", "综艺", "娱乐", "搞笑"],
            
            # 颜值穿搭类
            "颜值日常": ["颜值", "穿搭", "OOTD", "气质", "美女", "帅哥"],
            "美女写真": ["写真", "颜值", "妆造", "气质", "美女"],
            "帅哥写真": ["写真", "颜值", "健身", "穿搭", "帅哥"],
            "穿搭打卡": ["穿搭", "OOTD", "时尚", "妆造", "颜值"],
            "宅舞": ["宅舞", "舞蹈挑战", "舞室练习", "JK制服", "二次元"],
            "擦边舞蹈": ["宅舞", "舞蹈挑战", "手势舞", "cos", "颜值"],
            "OOTD": ["OOTD", "穿搭", "时尚", "颜值", "气质"],
            "JK制服": ["JK制服", "穿搭", "二次元", "颜值", "气质"],
            "汉服": ["汉服", "穿搭", "传统文化", "颜值", "气质"],
            "cosplay": ["cosplay", "cos", "二次元", "颜值", "角色扮演"],
            "气质美女": ["气质", "美女", "颜值", "写真"],
            "健身型男": ["健身", "型男", "帅哥", "颜值", "身材"],
            
            # 萌宠治愈类
            "萌宠日常": ["萌宠", "猫", "狗", "治愈", "可爱", "萌宠日常"],
            "萌宠": ["萌宠", "可爱", "治愈", "萌宠日常"],
            "萌娃": ["萌娃", "可爱", "治愈", "萌宠"],
            "治愈萌宠": ["治愈", "萌宠", "可爱", "萌宠日常"],
            "萌宠搞笑": ["萌宠", "搞笑", "可爱", "治愈"],
            "猫咪日常": ["猫咪", "猫", "萌宠", "可爱", "治愈"],
            "狗狗日常": ["狗狗", "狗", "萌宠", "可爱", "治愈"],
            "仓鼠日常": ["仓鼠", "萌宠", "可爱", "治愈"],
            "异宠日常": ["异宠", "萌宠", "可爱", "治愈"],
            "萌宠合集": ["萌宠", "可爱", "治愈", "萌宠日常"],
            "治愈系": ["治愈", "萌宠", "可爱", "温暖"],
            
            # 美食探店类
            "美食探店": ["美食", "探店", "奇葩美食", "生活", "料理"],
            "奇葩美食": ["奇葩美食", "美食", "探店", "料理"],
            "美食": ["美食", "料理", "烹饪", "生活"],
            "探店": ["探店", "美食", "打卡", "生活"],
            "美食制作": ["美食", "制作", "料理", "烹饪", "教程"],
            "美食挑战": ["美食", "挑战", "料理", "烹饪"],
            "街头美食": ["街头美食", "美食", "探店", "生活"],
            "网红美食": ["网红美食", "美食", "探店", "打卡"],
            "地方特色": ["地方特色", "美食", "探店", "生活"],
            "美食测评": ["美食", "测评", "探店", "生活"],
            "美食教程": ["美食", "教程", "料理", "烹饪"],
            "美食分享": ["美食", "分享", "料理", "生活"],
            
            # 音乐舞蹈类
            "音乐分享": ["音乐", "翻唱", "舞蹈挑战", "手势舞", "歌曲"],
            "翻唱": ["翻唱", "音乐", "歌曲", "表演"],
            "洗脑神曲": ["洗脑神曲", "音乐", "歌曲", "洗脑"],
            "舞蹈挑战": ["舞蹈挑战", "舞蹈", "手势舞", "挑战"],
            "手势舞": ["手势舞", "舞蹈", "音乐", "挑战"],
            "原创音乐": ["原创音乐", "音乐", "创作", "歌曲"],
            "音乐制作": ["音乐制作", "音乐", "创作", "制作"],
            "乐器演奏": ["乐器演奏", "音乐", "演奏", "技巧"],
            "音乐教学": ["音乐教学", "音乐", "教学", "技巧"],
            "舞蹈教学": ["舞蹈教学", "舞蹈", "教学", "技巧"],
            "音乐现场": ["音乐现场", "音乐", "表演", "现场"],
            
            # 生活实用类
            "生活小技巧": ["生活", "小技巧", "职场", "日常", "实用"],
            "职场干货": ["职场", "干货", "技巧", "方法", "实用"],
            "情感故事": ["情感", "故事", "恋爱", "治愈", "生活"],
            "生活": ["生活", "日常", "技巧", "实用"],
            "技巧": ["技巧", "方法", "实用", "教程"],
            "实用技巧": ["实用技巧", "技巧", "方法", "生活"],
            "职场技能": ["职场技能", "职场", "技能", "方法"],
            "理财知识": ["理财知识", "理财", "知识", "技巧"],
            "健康养生": ["健康养生", "健康", "养生", "生活"],
            "家庭教育": ["家庭教育", "教育", "家庭", "育儿"],
            "心理知识": ["心理知识", "心理", "知识", "情感"],
            "法律知识": ["法律知识", "法律", "知识", "实用"],
            
            # 知识科普类
            "科技前沿": ["科技", "知识", "科普", "前沿", "技术"],
            "知识科普": ["知识科普", "知识", "科普", "科学"],
            "科技": ["科技", "技术", "创新", "前沿"],
            "知识": ["知识", "科普", "科学", "学习"],
            "科普": ["科普", "科学", "知识", "教育"],
            "科学实验": ["科学实验", "科学", "实验", "知识"],
            "历史趣闻": ["历史趣闻", "历史", "趣闻", "知识"],
            "文化知识": ["文化知识", "文化", "知识", "历史"],
            "地理知识": ["地理知识", "地理", "知识", "科普"],
            "生物知识": ["生物知识", "生物", "知识", "科普"],
            "物理知识": ["物理知识", "物理", "知识", "科学"],
            "化学知识": ["化学知识", "化学", "知识", "科学"],
            
            # 美食类（补充）
            "美食": ["美食", "料理", "烹饪", "生活"],
            "美食测评": ["美食", "测评", "探店", "生活"],
            "地方特色": ["地方特色", "美食", "探店", "生活"],
            
            # 健身运动类（补充）
            "运动": ["运动", "健身", "锻炼", "健康"],
            "运动技巧": ["运动技巧", "运动", "技巧", "健身"],
            "减肥分享": ["减肥分享", "减肥", "健身", "运动"],
            "塑形教程": ["塑形教程", "塑形", "健身", "运动"],
            
            # 教育学习类（补充）
            "学习": ["学习", "教育", "知识", "技巧"],
            "英语学习": ["英语学习", "英语", "学习", "语言"],
            "技能学习": ["技能学习", "技能", "学习", "技巧"],
            "语言学习": ["语言学习", "语言", "学习", "教育"],
            
            # 情感心理类（补充）
            "心理健康": ["心理健康", "心理", "健康", "情感"],
            "情感治愈": ["情感治愈", "情感", "治愈", "心理"],
            "恋爱技巧": ["恋爱技巧", "恋爱", "技巧", "情感"],
            "婚姻生活": ["婚姻生活", "婚姻", "生活", "情感"],
            "情感咨询": ["情感咨询", "情感", "咨询", "心理"],
            "心理分析": ["心理分析", "心理", "分析", "情感"],
            "情感建议": ["情感建议", "情感", "建议", "心理"],
            
            # 手工创意类（补充）
            "艺术创作": ["艺术创作", "艺术", "创作", "创意"],
            "创意视频": ["创意视频", "创意", "视频", "艺术"],
            "艺术分享": ["艺术分享", "艺术", "分享", "创意"],
            "视频剪辑": ["视频剪辑", "剪辑", "视频", "技术"],
            "书法教学": ["书法教学", "书法", "教学", "艺术"],
            "绘画教程": ["绘画教程", "绘画", "教程", "艺术"],
            
            # 汽车科技类（补充）
            "科技产品": ["科技产品", "科技", "产品", "数码"],
            "数码科技": ["数码科技", "数码", "科技", "技术"],
            "科技资讯": ["科技资讯", "科技", "资讯", "技术"],
            "新车推荐": ["新车推荐", "新车", "推荐", "汽车"],
            "汽车知识": ["汽车知识", "汽车", "知识", "科技"],
            "汽车改装": ["汽车改装", "汽车", "改装", "技术"],
            "汽车保养": ["汽车保养", "汽车", "保养", "实用"],
            "驾驶技巧": ["驾驶技巧", "驾驶", "技巧", "汽车"],
            "数码评测": ["数码评测", "数码", "评测", "科技"],
            "手机测评": ["手机测评", "手机", "测评", "数码"],
            "电脑配置": ["电脑配置", "电脑", "配置", "科技"],
            
            # 母婴育儿类（补充）
            "亲子互动": ["亲子互动", "亲子", "互动", "育儿"],
            "母婴用品": ["母婴用品", "母婴", "用品", "育儿"],
            "育儿技巧": ["育儿技巧", "育儿", "技巧", "母婴"],
            "儿童心理": ["儿童心理", "儿童", "心理", "育儿"],
            "亲子游戏": ["亲子游戏", "亲子", "游戏", "育儿"],
            "儿童健康": ["儿童健康", "儿童", "健康", "育儿"],
            "育儿分享": ["育儿分享", "育儿", "分享", "母婴"],
            "母婴护理": ["母婴护理", "母婴", "护理", "育儿"],
            
            # 热点时事类（补充）
            "科技新闻": ["科技新闻", "科技", "新闻", "热点"],
            "社会新闻": ["社会新闻", "社会", "新闻", "热点"],
            "国际新闻": ["国际新闻", "国际", "新闻", "热点"],
            "财经新闻": ["财经新闻", "财经", "新闻", "热点"],
            "明星八卦": ["明星八卦", "明星", "八卦", "娱乐"],
            "网红资讯": ["网红资讯", "网红", "资讯", "娱乐"],
            "时事评论": ["时事评论", "时事", "评论", "新闻"],
            "社会热点": ["社会热点", "社会", "热点", "新闻"],
            "新闻解读": ["新闻解读", "新闻", "解读", "热点"],
            
            # 旅行户外类
            "旅行vlog": ["旅行", "vlog", "探店", "生活", "户外"],
            "旅行": ["旅行", "户外", "探险", "生活"],
            "vlog": ["vlog", "旅行", "生活", "记录"],
            "户外探险": ["户外探险", "户外", "探险", "旅行"],
            "自驾游": ["自驾游", "旅行", "户外", "自驾"],
            "背包客": ["背包客", "旅行", "户外", "探险"],
            "城市探索": ["城市探索", "城市", "旅行", "生活"],
            "自然风光": ["自然风光", "自然", "风光", "旅行"],
            "人文景观": ["人文景观", "人文", "景观", "旅行"],
            "旅行攻略": ["旅行攻略", "旅行", "攻略", "实用"],
            "旅行分享": ["旅行分享", "旅行", "分享", "生活"],
            "户外运动": ["户外运动", "户外", "运动", "健身"],
            
            # 健身运动类
            "健身打卡": ["健身打卡", "健身", "运动", "打卡"],
            "健身": ["健身", "运动", "锻炼", "健康"],
            "运动": ["运动", "健身", "锻炼", "健康"],
            "瑜伽": ["瑜伽", "健身", "运动", "健康"],
            "跑步": ["跑步", "运动", "健身", "健康"],
            "游泳": ["游泳", "运动", "健身", "健康"],
            "骑行": ["骑行", "运动", "健身", "户外"],
            "健身教程": ["健身教程", "健身", "教程", "运动"],
            "运动技巧": ["运动技巧", "运动", "技巧", "健身"],
            "减肥分享": ["减肥分享", "减肥", "健身", "运动"],
            "塑形教程": ["塑形教程", "塑形", "健身", "运动"],
            "运动挑战": ["运动挑战", "运动", "挑战", "健身"],
            "健身日常": ["健身日常", "健身", "日常", "运动"],
            
            # 教育学习类
            "教育": ["教育", "学习", "知识", "教学"],
            "学习": ["学习", "教育", "知识", "技巧"],
            "考试": ["考试", "学习", "教育", "技巧"],
            "考研": ["考研", "学习", "考试", "教育"],
            "英语学习": ["英语学习", "英语", "学习", "语言"],
            "编程教学": ["编程教学", "编程", "教学", "技术"],
            "技能学习": ["技能学习", "技能", "学习", "技巧"],
            "语言学习": ["语言学习", "语言", "学习", "教育"],
            "学习方法": ["学习方法", "学习", "方法", "技巧"],
            "学习技巧": ["学习技巧", "学习", "技巧", "方法"],
            "考试技巧": ["考试技巧", "考试", "技巧", "学习"],
            "学习分享": ["学习分享", "学习", "分享", "教育"],
            
            # 热点时事类
            "热点追踪": ["热点追踪", "热点", "热搜", "新闻"],
            "今日热点": ["今日热点", "热点", "热搜", "新闻"],
            "时事评论": ["时事评论", "时事", "评论", "新闻"],
            "社会热点": ["社会热点", "社会", "热点", "新闻"],
            "新闻解读": ["新闻解读", "新闻", "解读", "热点"],
            "热点分析": ["热点分析", "热点", "分析", "新闻"],
            "明星八卦": ["明星八卦", "明星", "八卦", "娱乐"],
            "网红资讯": ["网红资讯", "网红", "资讯", "娱乐"],
            "社会新闻": ["社会新闻", "社会", "新闻", "热点"],
            "国际新闻": ["国际新闻", "国际", "新闻", "热点"],
            "财经新闻": ["财经新闻", "财经", "新闻", "热点"],
            "科技新闻": ["科技新闻", "科技", "新闻", "热点"],
            
            # 情感心理类
            "情感故事": ["情感故事", "情感", "故事", "恋爱"],
            "心理分析": ["心理分析", "心理", "分析", "情感"],
            "情感咨询": ["情感咨询", "情感", "咨询", "心理"],
            "恋爱技巧": ["恋爱技巧", "恋爱", "技巧", "情感"],
            "婚姻生活": ["婚姻生活", "婚姻", "生活", "情感"],
            "家庭关系": ["家庭关系", "家庭", "关系", "情感"],
            "心理健康": ["心理健康", "心理", "健康", "情感"],
            "情感治愈": ["情感治愈", "情感", "治愈", "心理"],
            "心理测试": ["心理测试", "心理", "测试", "情感"],
            "情感分享": ["情感分享", "情感", "分享", "心理"],
            "心理知识": ["心理知识", "心理", "知识", "情感"],
            "情感建议": ["情感建议", "情感", "建议", "心理"],
            
            # 手工创意类
            "手工制作": ["手工制作", "手工", "制作", "创意"],
            "创意DIY": ["创意DIY", "创意", "DIY", "手工"],
            "手工教程": ["手工教程", "手工", "教程", "制作"],
            "创意设计": ["创意设计", "创意", "设计", "艺术"],
            "艺术创作": ["艺术创作", "艺术", "创作", "创意"],
            "手工艺品": ["手工艺品", "手工", "工艺品", "艺术"],
            "绘画教程": ["绘画教程", "绘画", "教程", "艺术"],
            "书法教学": ["书法教学", "书法", "教学", "艺术"],
            "摄影技巧": ["摄影技巧", "摄影", "技巧", "艺术"],
            "视频剪辑": ["视频剪辑", "剪辑", "视频", "技术"],
            "创意视频": ["创意视频", "创意", "视频", "艺术"],
            "艺术分享": ["艺术分享", "艺术", "分享", "创意"],
            
            # 汽车科技类
            "汽车评测": ["汽车评测", "汽车", "评测", "科技"],
            "汽车知识": ["汽车知识", "汽车", "知识", "科技"],
            "汽车改装": ["汽车改装", "汽车", "改装", "技术"],
            "驾驶技巧": ["驾驶技巧", "驾驶", "技巧", "汽车"],
            "汽车保养": ["汽车保养", "汽车", "保养", "实用"],
            "新车推荐": ["新车推荐", "新车", "推荐", "汽车"],
            "科技产品": ["科技产品", "科技", "产品", "数码"],
            "数码评测": ["数码评测", "数码", "评测", "科技"],
            "手机测评": ["手机测评", "手机", "测评", "数码"],
            "电脑配置": ["电脑配置", "电脑", "配置", "科技"],
            "科技资讯": ["科技资讯", "科技", "资讯", "技术"],
            "数码科技": ["数码科技", "数码", "科技", "技术"],
            
            # 母婴育儿类
            "母婴知识": ["母婴知识", "母婴", "知识", "育儿"],
            "育儿经验": ["育儿经验", "育儿", "经验", "母婴"],
            "儿童教育": ["儿童教育", "儿童", "教育", "育儿"],
            "亲子互动": ["亲子互动", "亲子", "互动", "育儿"],
            "母婴用品": ["母婴用品", "母婴", "用品", "育儿"],
            "育儿技巧": ["育儿技巧", "育儿", "技巧", "母婴"],
            "儿童心理": ["儿童心理", "儿童", "心理", "育儿"],
            "家庭教育": ["家庭教育", "家庭", "教育", "育儿"],
            "亲子游戏": ["亲子游戏", "亲子", "游戏", "育儿"],
            "儿童健康": ["儿童健康", "儿童", "健康", "育儿"],
            "育儿分享": ["育儿分享", "育儿", "分享", "母婴"],
            "母婴护理": ["母婴护理", "母婴", "护理", "育儿"]
        }

        if category in exact_map:
            base_labels = exact_map[category][:]
        else:
            # 2) 关键词映射（次优先）
            keyword_map = {
                "搞笑": ["搞笑", "沙雕", "段子", "神回复", "恶搞"],
                "萌宠": ["萌宠", "猫", "狗", "治愈", "可爱"],
                "美食": ["美食", "探店", "奇葩美食", "料理"],
                "游戏": ["游戏", "FPS", "MOBA", "攻略", "技巧"],
                "影视": ["影视", "剧情", "反转", "爽剧", "名场面"],
                "音乐": ["音乐", "翻唱", "舞蹈挑战", "手势舞"],
                "生活": ["生活", "日常", "小技巧", "实用"],
                "科技": ["科技", "科普", "前沿", "技术"],
                "旅行": ["旅行", "vlog", "探店", "户外"],
                "颜值": ["颜值", "穿搭", "OOTD", "气质"],
                "写真": ["写真", "妆造", "气质", "颜值"],
                "宅舞": ["宅舞", "手势舞", "舞室练习", "舞蹈"],
                "健身": ["健身", "运动", "锻炼", "健康"],
                "教育": ["教育", "学习", "知识", "教学"],
                "热点": ["热点", "热搜", "新闻", "时事"],
                "情感": ["情感", "恋爱", "心理", "治愈"],
                "手工": ["手工", "DIY", "创意", "艺术"],
                "汽车": ["汽车", "科技", "评测", "技术"],
                "母婴": ["母婴", "育儿", "儿童", "家庭"]
            }
            base_labels = []
            for kw, tags in keyword_map.items():
                if kw in category:
                    base_labels.extend(tags)
            if not base_labels:
                base_labels = ["日常", "生活", "治愈"]

        # 3) 采样与通用少量扩展
        base_labels = list(dict.fromkeys(base_labels))  # 去重保序
        num_labels = random.randint(3, 6)  # 减少标签数量，避免过多
        selected = random.sample(base_labels, min(num_labels, len(base_labels)))

        # 不再添加通用标签，确保标签与内容匹配
        return selected[:num_labels]

def main():
    # 解析命令行参数
    output_size = 1000
    if len(sys.argv) > 1:
        output_size = int(sys.argv[1])
    
    # 创建生成器
    generator = EnhancedVideoGenerator(output_size)
    
    # 生成数据
    print(f"正在生成 {output_size} 条视频数据...")
    data = generator.generate_video_data()
    
    # 创建DataFrame
    df = pd.DataFrame(data)
    
    # 保存为CSV文件（保存到short-video-recommandation-algorithms-master/data/ 目录下）
    import os
    output_file = 'short-video-recommandation-algorithms-master/data/video_1000_20250907.csv'
    os.makedirs(os.path.dirname(output_file), exist_ok=True)
    df.to_csv(output_file, index=False, encoding='utf-8-sig')
    
    # 显示统计信息
    print("\n数据生成完成！")
    print(f"数据已保存至：{output_file}")
    print(f"共生成 {len(df)} 条数据")
    print("\n前10条数据预览：")
    print(df[['vid', 'title', 'category', 'duration', 'author', 'likes']].head(10))
    
    print("\n数据统计：")
    print(f"平均点赞数：{df['likes'].mean():.2f}")
    print(f"平均收藏数：{df['favorites'].mean():.2f}")
    print(f"平均转发数：{df['reposts'].mean():.2f}")
    print(f"平均时长：{df['duration'].mean():.2f}秒")
    
    print("\n分类分布：")
    print(df['category'].value_counts().head(10))

if __name__ == "__main__":
    main()
